package com.cskaoyan.market.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author 小焦
 * @since 2023/03/19 10:40
 */
public class Md5Utils {
    private static final String DEFAULT_PRESALT = "{#!";
    private static final String DEFAULT_AFTERSALT = "abc";

    /**
     * MD5 标准散列算法
     * 
     * @param content
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static String getMd5(String content) throws NoSuchAlgorithmException {
        // 获取消息摘要算法
        MessageDigest messageDigest = MessageDigest.getInstance("md5");
        // 将正文字节转换成md5字节
        byte[] contentBytes = content.getBytes();
        // 将 content字符串 转换成16byte 的字节数组 即 128bit数据
        byte[] resultBytes = messageDigest.digest(contentBytes); // byte 8 2^8 ff
        int length = resultBytes.length;
        System.out.println("length = " + length);
        StringBuffer sb = new StringBuffer();
        // 遍历这个字节数组
        for (byte resultByte : resultBytes) {
            // 将每个字节 & 0xff--16进制 =255
            int temp = resultByte & 0xff;
            String s = Integer.toHexString(temp);
            if (s.length() == 1) {
                sb.append(0);
            }
            sb.append(s);
        }

        return sb.toString();
    }

    /**
     * 为了保证安全 --加盐
     * 
     * @param content
     * @param sault
     * @return
     */
    public static String getMd5(String content, String sault) {
        // 实现加盐
        content = DEFAULT_PRESALT + content + DEFAULT_AFTERSALT + sault;
        byte[] bytes = content.getBytes();
        // 获取MD5消息摘要算法实例
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("md5");
            StringBuffer sb = new StringBuffer();
            // 将正文字节转换成md5字节
            byte[] digest = md5.digest(bytes);
            for (byte b : digest) {
                // 将这个byte & 255; --> 得到这个字节本身
                int temp=b&0xff;
                String s = Integer.toHexString(temp);
                if(s.length()==1){
                    sb.append(0);
                }
                sb.append(s);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}
